Матч 22, Последовательность Фибоначчи (FibonacciSequence)

 

Последовательность чисел Фибоначчи задается следующим рекуррентным соотношением:

F1 = F2 = 1,

Fn = Fn-1 + Fn-2

По заданным a и b определить количество чисел Фибоначчи в промежутке от a до b включительно.

 

Класс: FibonacciSequence

Метод: int numFibs(int a, int b)

Ограничения: 2 £ a £ 1000, a £ b £ 1000.

 

Вход. Два целых числа a и b.

 

Выход. Количество чисел Фибоначчи в промежутке от a до b включительно.

 

Пример входа

a

b

2

5

12

13

13

13

 

Пример выхода

3

1

1

 

 

РЕШЕНИЕ

числа Фибоначчи

 

Вычислим в массиве m все значения чисел Фибоначчи от m[0] = F0 = 0 до m[45] = F45 > 1000, используя приведенное выше рекуррентное соотношение. Проходим по массиву m и подсчитываем в переменной c количество чисел Фибоначчи, находящихся в промежутке [a; b].

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

using namespace std;

 

int m[46];

 

class FibonacciSequence

{

public:

  int numFibs(int a, int b)

  {

    int i, c;

    m[0] = 0; m[1] = 1;

    for(i = 2; i < 46; i++) m[i] = m[i-1] + m[i-2];

    for(c = i = 0; i < 46;i++)

      if ((m[i] >= a) && (m[i] <= b)) c++;

    return c;

  }

};